import base from '../assets/scripts/base/base'
import axios from 'axios/index'
import qs from 'qs'

// 导入基础方法
const Base = base()
// loading的配置项
const loadingOpts = {
  lock: true,
  text: '拼命加载中...',
  spinner: 'el-icon-loading',
  background: 'rgba(0, 0, 0, 0.7)'
}

export default {
  // get请求方法
  getForm: function (state, params) {
    let _this = this
    if (!params.data) {
      params.data = {}
    }
    params.data.token = Base.getSessionStorage('token')
    return new Promise((resolve) => {
      if (_this.state.loginShow) {
        return
      }
      // data需stringify后直接传入url
      if (!params.noLoading) {
        _this.commit('showLoading')
      }
      axios.get(params.url + '?' + qs.stringify(params.data), {
        headers: {
          // "token": Base.getSessionStorage("token"),
          'Content-Type': 'application/json;charset=UTF-8'
        }
      }).then(function (res) {
        if (_this.state.loginShow) {
          return
        }
        if (!params.noLoading) {
          _this.commit('hideLoading')
        }
        // 403为token失效
        if (res.data.code === 403 && !_this.state.loginShow) {
          _this._vm.$alert('登录信息失效，请重新登录').then(res => {
            _this.commit('hideLoading', 0)
          })
          Base.setSessionStorage('token', '')
          _this.commit('changeLoginShow', true)
          return
        }
        if (res.data.code === 0) {
          if (res.data.result) {
            resolve(res.data.result)
          } else {
            resolve(res.data)
          }
        } else {
          _this._vm.$alert(res.data.msg)
          // reject();
        }
      }, function (error) {
        if (!params.noLoading) {
          _this.commit('hideLoading')
        }
        _this._vm.$message({
          message: error.response.statusText,
          type: 'error'
        })
      })
    })
  },
  // 上传图片请求方法
  postUploadForm: function (state, params) {
    let _this = this
    if (!params.data) {
      params.data = {}
    }
    return new Promise((resolve, reject) => {
      let config = {
        headers: {
          'Content-Type': 'multipart/form-data',
          'token': Base.getSessionStorage('token')
        }
      }
      let loading = _this._vm.$loading(loadingOpts)
      axios.post(params.url, params.data, config).then(function (res) {
        loading.close()
        if (res.data.code === 403 && !_this.state.loginShow) {
          _this._vm.$alert('登录信息失效，请重新登录').then(res => {
            _this.commit('hideLoading', 0)
          })
          Base.setSessionStorage('token', '')
          _this.commit('changeLoginShow', true)
        }
        if (res.data.code === 500) reject(res.data)
        if (res.data) {
          resolve(res.data)
        }
      }).catch((err) => {
        reject(err)
      })
    })
  },
  // 上传数组请求方法
  postArrayForm: function (state, params) {
    let _this = this
    if (!params.data) {
      params.data = {}
    }
    return new Promise((resolve) => {
      if (_this.state.loginShow) {
        return
      }
      if (!params.noLoading) {
        _this.commit('showLoading')
      }

      let tmpHeaders = {}
      if (params.isJson) {
        tmpHeaders = {
          'token': Base.getSessionStorage('token'),
          'Content-Type': 'application/json;charset=UTF-8'
        }
      }

      // data需stringify后直接传入url
      axios.post(params.url, params.isJson ? params.data : qs.stringify(params.data), {
        headers: tmpHeaders
      }).then(function (res) {
        if (_this.state.loginShow) {
          return
        }
        if (!params.noLoading) {
          _this.commit('hideLoading')
        }
        // 403为token失效
        if (res.data.code === 403 && !_this.state.loginShow) {
          _this._vm.$alert('登录信息失效，请重新登录').then(res => {
            _this.commit('hideLoading', 0)
          })
          Base.setSessionStorage('token', '')
          _this.commit('changeLoginShow', true)
          return
        }
        if (res.data && res.data.code === 0) {
          resolve(res.data)
        } else {
          // reject();
          _this._vm.$alert(res.data.msg)
        }
      })
    })
  },
  // post请求方法
  postForm: function (state, params) {
    let _this = this
    if (!params.data) {
      params.data = {}
    }
    params.data.token = Base.getSessionStorage('token')
    return new Promise((resolve) => {
      if (_this.state.loginShow) {
        return
      }
      if (!params.noLoading) {
        _this.commit('showLoading')
      }

      let tmpHeaders = {}
      if (params.isJson) {
        tmpHeaders = {
          'token': Base.getSessionStorage('token'),
          'Content-Type': 'application/json;charset=UTF-8'
        }
      }

      // data需stringify后直接传入url
      axios.post(params.url, params.isJson ? params.data : qs.stringify(params.data), {
        headers: tmpHeaders
      }).then(function (res) {
        if (_this.state.loginShow) {
          return
        }
        if (!params.noLoading) {
          _this.commit('hideLoading')
        }
        // 403为token失效
        if (res.data.code === 403 && !_this.state.loginShow) {
          _this._vm.$alert('登录信息失效，请重新登录').then(res => {
            _this.commit('hideLoading', 0)
          })
          Base.setSessionStorage('token', '')
          _this.commit('changeLoginShow', true)
          return
        }
        if (res.data && res.data.code === 0) {
          resolve(res.data)
        } else {
          // reject();
          _this._vm.$alert(res.data.msg)
        }
      })
    })
  }
}
